/*
 * Dette er en kildefil til boken "Objektorientert programmering med Java"
 * 
 * Boken fåes i bokhandelen og http://www.fagbokforlaget.no
 * ISBN 82-7674-748-5
 * 
 * Direkte link: http://www.fagbokforlaget.no/?isbn=978-82-7674-748-5
 * 
 * Viggo Holmstedt 2001 - 2011

 */ 
// import javax.swing.*;
import java.awt.event.*;
import java.awt.*;


/**
author Vigo Holmstedt
7. october 1999

Bruk:
	Et vindu kan konstruere et nytt vindu til h�yre for seg,
	eller fjerne det hvis det allerede er der. Dette skjer n�r
	vinduet f�r fokus.

	F� konstruert tre vinduer ved � skifte fokus med museklikk.
	Fjern det f�rste.
	Kan de to siste fjernes uten � lukke programmet?
*/


class FocusAddRemove extends Frame implements FocusListener {

 public FocusAddRemove() {
  setTitle("Jeg har mistet fokus");
  setSize(200,200);
  addWindowListener(new WindowAdapter() {
	  public void windowClosing(WindowEvent e) {
		  System.exit(0);}});

  lokalTeller = teller++;
  addFocusListener(this);
  show();
 }

 public String toString() {
  return " Component "+new Integer(lokalTeller).toString();
 }

 public void focusLost(FocusEvent evt) {
   setTitle("Jeg har mistet fokus");
   Component cmp = evt.getComponent();
   System.out.println("  Focuslost "+cmp);
 }

 public void focusGained(FocusEvent evt) {
   setTitle("Jeg har f�tt fokus");
   Component cmp = evt.getComponent();
   System.out.println("FocusGained "+notYet+"  "+f+cmp);
   if (!notYet) {
	   if (f==null) {
		   f = new FocusAddRemove();
           f.setLocation(getX()+getWidth(),getY());
           f.show();
      } else {
		  teller--;
	      f.dispose();
          f=null;
        }
   } notYet=false;
 }

 FocusAddRemove 	f;
 static int 		teller		=	0;
 int 				lokalTeller =	0;
 boolean 			notYet 		=	true;

}


public class FocusMania {
  public static void main(String[] args) {
   FocusAddRemove f = new FocusAddRemove();
   f.setLocation(10,400);
   f.show();
  }
}